<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    function foo() {

      let num = 10

      // 闭包就是一个函数，什么样的函数？访问另外一个函数内部变量的函数
      function xx() {

        console.log(num)
      }

      return xx
    }


    let gxx
    function f2() {

      let num = 10
      function xx() {

        console.log(num)
      }

      gxx = xx
    }


    function f3() {

      let num = 10

      // 这也是闭包
      window.getNum = function () {

        console.log(num)
      }
    }


    function f4() {

      let num = 10

      // 他们有没有符合是一个函数？符合
      // 他们有没有符合访问了另外一个函数内部变量？ 符合
      // 他们有没有符合让外界可以调用? 符合
      return {

        getNum: function () {
          console.log(num)
        },

        setNum: function () {

          num++
        }
      }
    }


    function f5(n1, n2) {

      // 因为形参也相当于是函数内部变量
      // 这些是不是函数？是
      // 这些访问了内部变量了没？ 访问了
      // 这些函数外界可以调用？ 可以
      return {

        setN1: function () {

          n1++
          console.log(n1)
        },
        setN2: function () {

          n2 += 10
          console.log(n2)
        },
      }
    }
  </script>
</body>

</html>